package com.zhengxyou.jetpackdemo.greenDao;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.zhengxyou.jetpackdemo.MyApplication;
import com.zhengxyou.jetpackdemo.R;

import androidx.appcompat.app.AppCompatActivity;

//https://toutiao.io/posts/yg1kyu/preview
//https://www.jianshu.com/p/130e312bb509

/**
 * <p>
 *
 * @Id注解选择 long / Long 属性作为实体ID。在数据库术语中，它是主键。参数自动增量，是使ID值不断增加（不会选用旧值）的标志。
 * @Property 让你定义一个非默认的列名，其属性映射到。如果不存在，greenDAO将在SQL杂交方式使用字段名（大写，下划线，而不是骆驼情况下，例如 customName将成为 CUSTOM_NAME）。注意：您目前只能使用内联常量来指定列名。
 * @NotNull makes the property a “NOT NULL” column on the database side。通常是有意义的纪念原始类型（long, int, short, byte）与@NotNull，同时具有包装类（Long, Integer, Short, Byte）空的值。
 * @Transient 表明这个字段不会被写入数据库，只是作为一个普通的java类字段，用来临时存储数据的，不会被持久化
 * @Entity 定义实体
 * @nameInDb 在数据库中的名字，如不写则为实体中类名
 * @indexes 索引, 作为一个属性来创建一个索引，默认是使用字段名
 * @createInDb 是否创建表，默认为true,false时不创建
 * @schema 指定架构名称为实体
 * @active 无论是更新生成都刷新
 * @NotNull 不为null
 * @Unique 唯一约束, 表名该属性在数据库中只能有唯一值
 * @ToMany 一对多
 * @OrderBy 排序
 * @ToOne 一对一
 * @Transient 不存储在数据库中
 * @generated 由greendao产生的构造函数或方法
 * </p>
 * @Entity 表明这个实体类会在数据库中生成一个与之相对应的表
 * 属性：
 * <p>
 * schema：告知GreenDao当前实体属于哪个 schema
 * schema active：标记一个实体处于活跃状态，活动实体有更新、删除和刷新方法
 * nameInDb：在数据库中使用的别名，默认使用的是实体的类名，
 * indexes：定义索引，可以跨越多个列
 * createInDb：标记创建数据库表（默认：true）
 * generateConstructors  自动创建全参构造方法（同时会生成一个无参构造方法）（默认：true）
 * generateGettersSetters  自动生成 getters and setters 方法（默认：true）
 * </p>
 * 作者：Courage_SC
 * 链接：https://www.jianshu.com/p/130e312bb509
 * 來源：简书
 * 简书著作权归作者所有，任何形式的转载都请联系作者获得授权并注明出处。
 * <p>
 * greenDAO高级用法@see https://blog.csdn.net/lidiwo/article/details/78625142
 * <p>
 * 结合sqlcipher加密数据库@see https://blog.csdn.net/lidiwo/article/details/78614531
 *
 * https://www.jianshu.com/p/853401a7d02b
 */
public class GreenDaoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_green_dao);
        TextView tv_name = findViewById(R.id.tv_name);
        DaoSession daoSession = ((MyApplication) getApplication()).getDaoSession();
        GUser user = daoSession.getGUserDao().load(2L);
        if (user != null) {
            tv_name.setText(user.getName());
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.e("TAG", "start insert");
                for (int i = 0; i < 100; i++) {
                    GUser user1 = new GUser();
                    user1.setName("这是第" + i + "个名字");
                    user1.setCreatedAt(String.valueOf(System.currentTimeMillis()));
                    daoSession.getGUserDao().insert(user1);
                }
                Log.e("TAG", "end insert");
            }
        }).start();

//        daoSession.getGUserDao().queryBuilder().where(GUserDao.Properties.Id.le(10)).build().list();

    }

    public static void start(Context context) {
        Intent starter = new Intent(context, GreenDaoActivity.class);
        context.startActivity(starter);
    }
}
